// package ace.module.oauth2.server.core.impl.authorization.oidc.authentication;
//
// import ace.cmp.security.core.impl.constant.Oauth2Constant;
// import ace.cmp.security.core.impl.constant.OidcConstant;
// import org.apache.commons.collections.MapUtils;
// import org.springframework.security.oauth2.core.oidc.OidcScopes;
// import org.springframework.security.oauth2.core.oidc.OidcUserInfo;
// import
// org.springframework.security.oauth2.server.authorization.oidc.authentication.OidcUserInfoAuthenticationContext;
//
// import java.util.HashMap;
// import java.util.Map;
//
/// **
// * @author caspar
// * @date 2023/3/13 9:18
// * @description
// */
// public class RestOidcUserInfoMapper implements OidcUserInfoMapper {
//    private final OidcUserInfoMapper defaultOidcUserInfoMapper = new DefaultOidcUserInfoMapper();
//    private final OAuth2OidcGetUserInfoProtocolService oidcGetUserInfoProtocolService;
//
//    public RestOidcUserInfoMapper(OAuth2OidcGetUserInfoProtocolService
// oidcGetUserInfoProtocolService) {
//        this.oidcGetUserInfoProtocolService = oidcGetUserInfoProtocolService;
//    }
//
//    @Override
//    public OidcUserInfo apply(OidcUserInfoAuthenticationContext context) {
//        OidcUserInfo defaultOidcUserInfo = this.defaultOidcUserInfoMapper.apply(context);
//        Map<String, Object> attributes = context.getAuthorization().getAttributes();
//        if (!context.getAccessToken().getScopes().contains(OidcScopes.OPENID) ||
//                MapUtils.isEmpty(attributes) ||
//                !attributes.containsKey(OidcScopes.OPENID)) {
//            return defaultOidcUserInfo;
//        }
//        String accountId = String.valueOf(attributes.get(Oauth2Constant.TOKEN_SUBJECT_KEY));
//        OAuth2OidcGetUserInfoResultDto userInfoResultDTO =
// this.oidcGetUserInfoProtocolService.getOidcUserInfo(accountId).check();
//        Map<String, Object> claims = new HashMap<>(defaultOidcUserInfo.getClaims());
//        claims.put(OidcConstant.AUTHORITIES_CLAIMS_NAME, userInfoResultDTO.getAuthorities());
//        claims.put(Oauth2Constant.TOKEN_SUBJECT_KEY, userInfoResultDTO.getAccountId());
//        return new OidcUserInfo(claims);
//    }
// }
